{{tag>APT paquet depôts}}

----

====== (Re)compiler un logiciel des dépôts ======

**Pour quoi faire ?** 
  * Si vous voulez patcher un logiciel ou le modifier
  * Si vous voulez ajouter des support optionnels qu'offre le logiciel, mais dont la version packagé n'a pas été compilé avec ces options.
  * Si vous voulez apprendre tout simplement.


Pour cette manipulation, il est important que le logiciel soit présent dans les dépôts et que les sources soient aussi disponibles.

Descriptif rapide de la manipulation :
  - Télécharger les sources depuis les depôts
  - Installer les headers et les bibliothèques nécessaires pour compiler le logiciel.
  - Effectuer les modifications sur les sources.
  - Construire notre paquet modifié.


==== Les préparatifs ====

Tout d'abord il faut installer les logiciels pour compiler c'est à dire un compilateurs et des outils pour la compilation, ainsi que les utilitaires APT dont nous allons nous servir.

[[:tutoriel:comment_installer_un_paquet|installez les paquets]] build-essential, dpkg-dev, fakeroot. Soit plus simplement les lignes de commandes suivantes :
<code>sudo apt-get install build-essential dpkg-dev fakeroot</code>

Ensuite il faudra récupérer les sources depuis un dépôt APT, pour cela il faut ajouter une ligne ''deb-src'' du dépôt correspondant au package binaire.

Par exemple si le logiciel est dans ''main'', il faut ajouter cette ligne (qui est un exemple qui ne marchera pas, je suppose que vous savez de quoi je parle) dans votre **/etc/apt/sources.list**
<code>deb-src http://url distribution main</code>

Ensuite on update la liste des paquets :
<code>sudo apt-get update</code>

==== Récupération des sources, et installations de dépendances ====

Dans cet exemple je modifie le paquet vlc.
Pour récupérer les sources on fait simplement :
<code>apt-get source vlc</code>

Et pour installer les paquets pour compiler vlc (remarquez que la plupart de ces dépendances finissent en -dev, en fait ce sont souvent les #includes que vous voyez dans les sources C, ils se trouvent dans **/usr/include**)
Une commande très pratique : (Notez aussi qu'on a pas eu besoin de sudo pour télécharger les sources, ni pour compiler d'ailleurs)
<code>sudo apt-get build-dep vlc</code>

Les sources seront installées dans le répertoire a partir duquel vous avez lancé le ''apt-get source''.

Normalement les sources sont dé-archivés automatiquement par dpkg-source (de dpkg-dev)
Si ce n'est pas le cas, il faudra le faire à la main.

Ensuite déplaçons nous dans le dossier des sources :
<code>cd vlc*</code>
==== Modification des sources ====

Maintenant que vous avez les sources, vous pouvez les modifier, les patcher etc.

Ensuite on va lancer la compilation. Toute la compilation sera gérée par le script **debian/rules**. Dans ce script il y a surement une ligne qui lance les paramètres du ./configure, vous pouvez aussi modifier cette ligne. 
(Ce script est fait par le mainteneur du paquet, donc suivant la personne il peut être présenté de manière différente où dans plusieurs fichier etc, donc je ne peux pas être plus explicite).


==== Compilation, création du paquet et installation ====

Ensuite c'est vraiment un jeux d'enfant, il suffit de lancer le script, en faisant croire au script qu'on est root.

En fait ce script procède de la manière suivante :
  - Compilation (ce qui correspond souvent au ./configure && make), généralement on peux le faire en utilisateur.
  - Instalation (le fameux make install), sauf que là, on veux créer un paquet, donc on va faire croire qu'on est root (à cause de certain Makefiles, qui font eux aussi des tests) pour créer toute l'arborescence que va contenir le paquet. Par exemple pour vlc, il va être dans **$PWD/debian/build/usr/bin/vlc**, avec un ''sudo make install'', on aurait copié vlc dans **/usr/bin/vlc** (d'où le sudo), mais là on veut juste créer **$PWD/debian/build/urs/bin/vlc** et on à la droit en tand qu'utilisateur...


Bref, ceci justifie l'utilisation de ''fakeroot''.

Donc pour lancer la compilation et la création du paquet, une seule commande (ultime) :

<code>fakeroot debian/rules binary</code>

Patientez, la compilation dépend de votre machine et de la taille des sources.

Quand c'est fini (et qu'il n'y a pas eu d'erreurs), le paquet crée devrait être dans le répertoire parent ''..''. Pour l'installer, rien de plus simple :

<code>sudo dpkg -i ../vlc-*.deb</code>


Et voilà, c'est simple propre et rapide. Ce n'est qu'un aperçu de ce que APT sait faire, donc je vous invite à aller plus loin, le site de debian [[debian.org]] regorge de documentation sur APT.

Bon packaging et bonnes compilations 8-)


----
Contributeur : [[utilisateurs:philpep-tlse]]